home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 1 / CU Amiga Magazine CD-ROM Special Edition (1995)(EMAP Images)(GB)[Issue 1995-11].iso / Aminet / comm / bbs / ACSDD110.lha / Developer / DreamDoor / Doc / DreamDoor.doc next >
Text File  |  1995-04-23  |  18KB  |  703 lines

  1. TABLE OF CONTENTS
  2.  
  3. DreamDoor.library/InitDoor
  4. DreamDoor.library/CloseDoor
  5. DreamDoor.library/SendString
  6. DreamDoor.library/Prompt
  7. DreamDoor.library/InquirePointers
  8. DreamDoor.library/DisplayFile
  9. DreamDoor.library/YesNo
  10. DreamDoor.library/ScanUserbase
  11. DreamDoor.library/UpdateStructures
  12. DreamDoor.library/XprSend
  13. DreamDoor.library/XprReceive
  14. DreamDoor.library/GetLrp
  15. DreamDoor.library/SetLrp
  16. DreamDoor.library/GetKey
  17. DreamDoor.library/ScanFileDirs
  18. DreamDoor.library/FlagFile
  19. DreamDoor.library/Disconnect
  20. DreamDoor.library/DDCommand
  21. DreamDoor.library/ResetIdle
  22. DreamDoor.library/Relogin
  23. DreamDoor.library/JoinConference
  24. DreamDoor.library/ChangeMsgBase
  25. DreamDoor.library/IntCommand
  26. DreamDoor.library/CheckKey
  27. DreamDoor.library/LineEditor
  28. DreamDoor.library/FifoExecute
  29. DreamDoor.library/WriteLog
  30. DreamDoor.library/InitDoor
  31.  
  32.    NAME
  33.     InitDoor - Initialize door
  34.  
  35.    SYNOPSIS
  36.     dif = InitDoor(node)
  37.      D0             A0
  38.  
  39.         struct DIFace *InitDoor(char *)
  40.  
  41.    FUNCTION
  42.     Allocates all required structures, ports and messages. You should
  43.     call this at the beginning of door.
  44.  
  45.    EXAMPLE
  46.         InitDoor(argv[1]);
  47.  
  48.    INPUTS
  49.     node - The ASCII (!!) value of the node number.
  50.  
  51.    RESULT
  52.     dif - Ptr to an initialized DIFace structure or NULL if
  53.           DayDream's doorport isn't open.
  54.  
  55.    SEE ALSO
  56.     CloseDoor
  57. DreamDoor.library/CloseDoor
  58.  
  59.    NAME
  60.     CloseDoor - Shutdown door and delete messages, ports and DIFace.
  61.  
  62.    SYNOPSIS
  63.     CloseDoor(dif)
  64.                   D0
  65.  
  66.     void CloseDoor(struct DIFace *);
  67.  
  68.    FUNCTION
  69.     You *MUST* call this function to close door. This deletes all
  70.     structures created by InitDoor() and tells DayDream that door
  71.     has finished it's job.
  72.  
  73.    NOTE
  74.     This call will close the doorport, so you won't be able to send
  75.     cmd's to DayDream anymore, but the door can still do other tasks.
  76.     So it is NOT necessary to quit right after doing a CloseDoor()
  77.     call!
  78.  
  79.     !!IMPORTANT!!
  80.     It is *NOT* possible to re-initialise door by calling InitDoor()
  81.     after doing CloseDoor()
  82.  
  83.    EXAMPLE
  84.     CloseDoor(dif);
  85.  
  86.    INPUTS
  87.     dif - A pointer to the DIFace structure returned by InitDoor()
  88.  
  89.    SEE ALSO
  90.     InitDoor
  91.  
  92. DreamDoor.library/SendString
  93.  
  94.    NAME
  95.     SendString - Type String
  96.  
  97.    SYNOPSIS
  98.     SendString(dif, string)
  99.                    D0   A0
  100.  
  101.     void SendString(struct DIFace *, char *);
  102.  
  103.    FUNCTION
  104.     Prints specified string of characters to remote user's display,
  105.     local screen or both. Possible ANSI codes will be automatically
  106.     stripped, if user has chosen an ASCII display mode. When in need
  107.     of changing line, string only needs to contain a linefeed, carriage
  108.     return (ASCII 13) will be inserted automatically.
  109.  
  110.    EXAMPLE
  111.     SendString(dif,"Hello World!");
  112.  
  113.    INPUTS
  114.     dif - A pointer to the DIFace structure returned by InitDoor()
  115.         string - A pointer to the null-terminated string containing text
  116.          to print.
  117.  
  118. DreamDoor.library/Prompt
  119.  
  120.    NAME
  121.     Prompt - Prompt for user input
  122.  
  123.    SYNOPSIS
  124.     success = Prompt(dif, buffer, length, flags, default)
  125.         D0               D0   A0      D1      D2     D3
  126.  
  127.         int Prompt(struct DIFace *, char *, ULONG, ULONG, char *)
  128.  
  129.    FUNCTION
  130.     Prompts user to enter a string. Length will  be restricted as
  131.     requested by the door. Full support for ANSI cursor sequences
  132.     is given, so that user can easily move through the string and
  133.     modify as required.
  134.  
  135.    EXAMPLE 
  136.     stat = Prompt(dif,GSTR,13,DPF_FILENAME,"Marsu jee!");
  137.  
  138.    INPUTS
  139.     dif - A pointer to the DIFace structure returned by InitDoor()
  140.     buffer - Pointer to the buffer, where the final string will be
  141.          inserted. 
  142.     length - Maximum length
  143.     flags - DPF_HIDDEN = Hidden mode, print *'s instead of real chars.
  144.         DPF_NOCRLF = Don't print CR+LF after receiving result code.
  145.         DPF_FILENAME = Don't allow any chars illegal in filenames.
  146.     default - Default string or NULL
  147.  
  148.    RESULT
  149.     success - 0L if carrier lost, 1L if successfull.
  150.  
  151. DreamDoor.library/InquirePointers
  152.  
  153.    NAME
  154.     InquirePointers - Inquire Structure Pointers
  155.  
  156.    SYNOPSIS
  157.     InquirePointers(dif, pointers)
  158.         D0              D0   A0
  159.  
  160.     void InquirePointers(struct DIFace *, struct DDPointers *)
  161.  
  162.    FUNCTION
  163.     This command will return with pointers to several significant
  164.     system structures, such as user structure etc.
  165.     Be careful when editing stuff in those pointers, because DayDream
  166.     uses same memoryblocks! You can also find out with this function 
  167.     if DayDream is in local mode.
  168.  
  169.    EXAMPLE
  170.     InquirePointers(d,pointermem);
  171.  
  172.    NOTE 
  173.     _NEVER_ use these pointers after DayDream has closed it's Doorport!
  174.  
  175.    INPUTS
  176.     dif - A Pointer to DIFace returned by InitDoor()
  177.     pointers - A pointer to allocated memoryblock where the pointers
  178.            are placed.
  179.  
  180. DreamDoor.library/DisplayFile
  181.  
  182.    NAME
  183.     DisplayFile - Display ANSI of ASCII-file
  184.  
  185.    SYNOPSIS
  186.     DisplayFile(dif, filename, flags)
  187.                     D0   A0        D1
  188.  
  189.        void DisplayFile(struct DIFace *, char *, ULONG)
  190.  
  191.    FUNCTION
  192.     This command outputs an ASCII or ANSI file into remote terminal,
  193.     local screen or both.
  194.  
  195.    EXAMPLE
  196.     DisplayFile(d,"s:user-startup",DDF_SHOWERROR);
  197.  
  198.    INPUTS
  199.     dif - A Pointer to the DIFace returned by InitDoor()
  200.     filename - A pointer to the filename to show.
  201.     flags - DDF_ADDEXTENSION = automatically add .GFX/.TXT.
  202.         DDF_SHOWERROR = In case file couldn't be found, show a
  203.                 visible error message instead of quiting
  204.                 quietly.
  205.                 DDF_STRIPKLUDGES = Strip fidonet kludges
  206.         DDF_CHECKCONF = Check if file exists in conference.
  207.                 DDF_CHECKACS = Check if there's file for the current
  208.                                access level
  209.         DDF_STRIPCTRL = Strip controlchars (Eg. Viewfile doors
  210.                 etc should have this on, if sysop doesn't
  211.                 want his HD formatted).
  212.  
  213. DreamDoor.library/YesNo
  214.  
  215.     NAME
  216.     YesNo - Prompt user for simple yes or no
  217.  
  218.     SYNOPSIS
  219.     result = YesNo(dif,default)
  220.     D0             d0  d1
  221.  
  222.     int YesNo(struct DIFace *, ULONG);
  223.  
  224.     FUNCTION
  225.     This function asks user to answer a simple yes or no question.
  226.     Door program must type the question by itself, since  all this
  227.     function outputs is an ASCII string "Yes" or "No" based on the
  228.     user's answer.
  229.  
  230.     EXAMPLE
  231.     poro = YesNo(d,DYESNO_NO);
  232.  
  233.     INPUTS
  234.     dif - A Pointer to the DIFace returned by InitDoor()
  235.     default - Default answer. 1 = Yes, 0 = No.
  236.  
  237.     RESULT
  238.     result - 0 = No, 1 = Yes, -1 = Carrier lost.
  239.  
  240. DreamDoor.library/ScanUserbase
  241.  
  242.     NAME
  243.     ScanUserbase - Scan Userbase for Scecified User Account
  244.  
  245.     SYNOPSIS
  246.     offset = ScanUserbase(dif, name)
  247.     D0                    D0   A0
  248.  
  249.     LONG ScanUserbase(struct DIFace *, char *);
  250.  
  251.     FUNCTION
  252.     This function scans user database (UserBase.DAT) in order to find
  253.     the specified account. Match can be made in real name or handle.
  254.     Operation is fully non-case-sensitive.
  255.  
  256.     INPUTS
  257.     dif - A Pointer to the DIFace returned by InitDoor()
  258.     name - A Pointer to the Handle or Name to user to be scanned.
  259.  
  260.     RESULT
  261.     offset - An offset to the matching account. -1 if account not
  262.          found.
  263.  
  264. DreamDoor.library/UpdateStructures
  265.  
  266.     NAME
  267.     UpdateStructures - Update DayDream Data Structures
  268.  
  269.     SYNOPSIS
  270.     UpdateStructures(dif)
  271.                          D0
  272.  
  273.     void UpdateStructures(struct *DIFace);
  274.  
  275.     FUNCTION
  276.     This function must be called after any DayDream structure has
  277.     been modified. Please remember to observe extreme cautiousness,
  278.     since careless modifications will lead to a system crash.
  279.  
  280.     INPUTS
  281.     dif - A Pointer to the DIFace returned by InitDoor()
  282.  
  283. DreamDoor.library/XprSend
  284.  
  285.     NAME
  286.     XprSend - Send file(s) w/ Xpr-Protocol.
  287.  
  288.     SYNOPSIS
  289.     XprSend(dif, files, default path)
  290.         D0   A0     A1
  291.  
  292.     void XprSend(struct *DIFace, char *, char *);
  293.  
  294.     FUNCTION
  295.     This function allows door to send file(s) to user using currently
  296.     selected XPR-Protocol. 
  297.  
  298.     INPUTS
  299.     dif - A Pointer to the DIFace returned by InitDoor()
  300.     files - Pointer to a data block, consisting of NULL-terminated to
  301.         be transferred. End of the block will be signaled with a $FF
  302.         (Byte). 
  303.     default path - Pointer to a valid AmigaDOS pathname. Files with no
  304.                path spec will be looked for in this directory.
  305.  
  306. DreamDoor.library/XprReceive
  307.  
  308.     NAME
  309.     XprReceive - Receive file(s) w/ Xpr-Protocol
  310.  
  311.     SYNOPSIS
  312.     XprReceive(dif, path)
  313.            D0   A0
  314.  
  315.     void XprReceive(struct *DIFace, char *);
  316.  
  317.     FUNCTION
  318.     This function allows door to receive files from user using currently
  319.     selected XPR-Protocol.
  320.  
  321.     INPUTS
  322.     dif - A Pointer to the DIFace returned by InitDoor()
  323.     path - path to receive files.
  324.  
  325. DreamDoor.library/GetLrp
  326.  
  327.     NAME
  328.     GetLrp - Gets last read pointer from specified message base.
  329.  
  330.     SYNOPSIS
  331.     result = GetLrp(dif, conf, base)
  332.     D0        D0   D1    D2
  333.  
  334.     ULONG *GetLrp(struct *DIFace, ULONG, ULONG);
  335.  
  336.     FUNCTION
  337.     Gets last read pointer of current user from specified message base.
  338.  
  339.     INPUTS
  340.     dif - A Pointer to the DIFace returned by InitDoor()
  341.     conf - Conference number
  342.     base - Message base number
  343.     
  344.     RESULT
  345.     result - Last read pointer is returned.
  346.  
  347. DreamDoor.library/SetLrp
  348.  
  349.     NAME
  350.     SetLrp - Sets last read pointer
  351.  
  352.     SYNOPSIS
  353.     SetLrp(dif, conf, base, lrp)
  354.            D0   D1    D2    D3
  355.  
  356.     void SetLrp(struct *DIFace, ULONG, ULONG, ULONG);
  357.  
  358.     FUNCTION
  359.     Gets last read pointer of current user to specified message base.
  360.  
  361.     INPUTS
  362.     dif - A Pointer to the DIFace returned by InitDoor()
  363.     conf - Conference number
  364.     base - Message base number
  365.     lrp - New Last read pointer
  366.  
  367. DreamDoor.library/GetKey
  368.  
  369.     NAME
  370.     GetKey - Gets a character from local console or remote terminal
  371.  
  372.     SYNOPSIS
  373.     result = GetKey(dif, flags)
  374.     D0         D0   D1
  375.     
  376.     ULONG *GetKey(struct *DIFace, ULONG);
  377.  
  378.     FUNCTION
  379.     This function simply waits for a single keypress from either the
  380.         local console or remote terminal. After receiving a character,
  381.         this function will immediately return with no further activity.
  382.  
  383.     INPUTS
  384.     dif - A Pointer to the DIFace returned by InitDoor()
  385.     flags - currently understands these flags:
  386.                 HOTKEY_SHOWCHAR - Show pressed character
  387.         HOTKEY_ADDLF    - Insert CRLF after received character
  388.         HOTKEY_CURSOR    - Check for cursor keys (250=up etc) 
  389.  
  390.     RESULT
  391.     result - NULL if carrier lost or received character
  392.  
  393. DreamDoor.library/ScanFileDirs
  394.  
  395.     NAME
  396.     ScanFileDirs - Vittu tän kans palaa taulu!
  397.  
  398.     SYNOPSIS
  399.     result = ScanFileDirs(dif, conf, pattern, hook, userdata)
  400.     D0              D0   D1    A0       A1    A2
  401.  
  402.     ULONG *ScanFileDirs(struct *DIFace, ULONG, char *, APTR, ULONG);
  403.  
  404.     FUNCTION
  405.     This function will scan all the file directories in the specified
  406.         conference and see if any of the files matches with given string;
  407.         wildcards allowed, of course. When a match is found, this routine
  408.         will call a hook routine with path, name and size of the file 
  409.         as it's parameters allowing it to process the file in any wanted
  410.         way. After the hook has returned, scanning will or will not be
  411.         continued depending on whether the search string contained any
  412.         wildcards (if it didn't, no more than one match is possible).
  413.     If hook is null, internal fileflagging hook of DayDream will be
  414.     used.
  415.  
  416.     INPUTS
  417.     dif - A Pointer to the DIFace returned by InitDoor()
  418.     conf - Conference number
  419.     pattern - Pointer to the search string, wildcards allowed.
  420.     hook - Pointer to the hook routine to call:
  421.  
  422.                Hook(Path, Filename, Size, UserData);
  423.                     A0    A1        D0    D1
  424.  
  425.                >WARNING< HOOK ROUTINE MAY ABSOLUTELY NOT
  426.                MODIFY ANY SYSTEM   REGISTERS  UNLESS THE
  427.                ORIGINAL VALUES ARE RETURNED BEFORE EXIT!
  428.  
  429.                If this is NULL, use File tagging-routines of DayDream.
  430.     userdata - User data variable - will be given to Hook() routine 
  431.                    as provided here. This will just pass through DD and
  432.                    doesn't have any effect on DD's operation. With this
  433.            field you can easily pass some data to your hook.
  434.  
  435.     NOTE
  436.     You may not call functions using DIF when in hook.
  437.     
  438.     RESULT
  439.     result - 0 - Operation successful
  440.                  1 - Not enough memory (only 2048 bytes needed)
  441.                  2 - Specified conference not found
  442.                  3 - Specified conference doesn't have any file directories
  443.  
  444. DreamDoor.library/FlagFile
  445.  
  446.     NAME
  447.     FlagFile - Add file to the download request
  448.  
  449.     SYNOPSIS
  450.     result = FlagFile(dif, path, file, flags, size)
  451.     D0                D0   A0    A1    D1     D2
  452.  
  453.     ULONG = FlagFile(struct *DIFace, char *, char *, ULONG, ULONG);
  454.  
  455.     FUNCTION
  456.     This function will add a file to the download request. Current dload
  457.         request will be checked first to avoid possible duplicate entries.
  458.         If no duplicate entry or other errors occurred, file will be added
  459.         to the filechain.
  460.  
  461.     INPUTS
  462.     dif - A Pointer to the DIFace returned by InitDoor()
  463.     path - Pointer to the path where the file to be added can be
  464.                found. PATH MUST END WITH A SLASH ('/') OR COLON (':')!
  465.     file - pointer to the actual filename
  466.     flags - FLAGFILE_FREE if file is a free download
  467.     size - Size of the file.
  468.  
  469.     RESULT
  470.     result - 0 - Operation successful
  471.                  1 - Duplicate entry found
  472.                  2 - File ratio problems
  473.                  3 - Byte ratio problems
  474.                  4 - Not enough memory
  475.  
  476. DreamDoor.library/Disconnect
  477.  
  478.     NAME
  479.     Disconnect - Kick some ass
  480.  
  481.     SYNOPSIS
  482.     Disconnect(dif)
  483.            D0
  484.  
  485.     void Disconnect(struct *DIFace);
  486.  
  487.     FUNCTION
  488.     This function will disconnect user from BBS.
  489.  
  490.     INPUTS
  491.     dif - A Pointer to the DIFace returned by InitDoor()
  492.  
  493. DreamDoor.library/DDCommand
  494.  
  495.     NAME
  496.     DDCommand - Run DayDream Command
  497.  
  498.     SYNOPSIS
  499.     DDCommand(dif, command)
  500.           D0   A0
  501.  
  502.     void DDCommand(struct *DIFace, char *);
  503.  
  504.     FUNCTION
  505.     Allows use of DayDream's commands (also external ones)
  506.  
  507.     INPUTS
  508.     dif - A Pointer to the DIFace returned by InitDoor()
  509.     command - Command to be executed.
  510.     
  511. DreamDoor.library/ResetIdle
  512.  
  513.     NAME
  514.     ResetIdle - Resets idle counter
  515.  
  516.     SYNOPSIS
  517.     ResetIdle(dif)
  518.           D0
  519.  
  520.     void ResetIdle(struct DIFace *);
  521.     
  522.     FUNCTION
  523.     This function will reset the idle-counter. Useful for doors
  524.     having own serial/console routines, before and after archiving
  525.     something etc. Note that hotkey, prompt etc. routines reset
  526.     the idle counter automatically.
  527.  
  528.     INPUTS
  529.     dif - A Pointer to the DIFace returned by InitDoor()
  530.  
  531. DreamDoor.library/Relogin
  532.  
  533.     NAME
  534.     Relogin - VITTU SE ON JUST NIINKU SE ON! HAHA!
  535.  
  536.     SYNOPSIS
  537.     Relogin(dif)
  538.         D0
  539.  
  540.     void Relogin(struct DIFace *);
  541.  
  542.     FUNCTION
  543.     Same as CloseDoor(), except this will relogin user to the
  544.         system.
  545.  
  546.     INPUTS
  547.     dif - A Pointer to the DIFace returned by InitDoor()
  548.     
  549.  
  550. DreamDoor.library/JoinConference
  551.  
  552.     NAME
  553.     JoinConference - Joins specified Conference
  554.  
  555.     SYNOPSIS
  556.     JoinConference(dif, conf, flags)
  557.             D0    D1    D2
  558.  
  559.     void JoinConference(struct DIFace *, ULONG, ULONG);
  560.  
  561.     FUNCTION
  562.     Joins specified conference.
  563.  
  564.     INPUTS
  565.     dif - A Pointer to the DIFace returned by InitDoor()
  566.     conf - number of conference to join
  567.     flags - JOINCONFF_ASKNEW - Ask new conference if requested conference
  568.                    doesn't exist
  569.         JOINCONFF_QUICK - Do not load any conference specific data
  570.                   etc. If you use this, you must join back
  571.                   to the original conference before quitting
  572.                   door.
  573.         JOINCONFF_SKIPTXT - Skip JoinConference.TXT|GFX 
  574.  
  575. DreamDoor.library/ChangeMsgBase
  576.  
  577.     NAME
  578.     ChangeMsgBase - Change current message base
  579.  
  580.     SYNOPSIS
  581.     ChangeMsgBase(dif, base, flags)
  582.               D0    D1    D2
  583.  
  584.     void ChangeMsgBase(struct DIFace *, ULONG, ULONG);
  585.  
  586.     FUNCTION
  587.     This function changes the current msg base.
  588.  
  589.     INPUTS
  590.     dif - A Pointer to the DIFace returned by InitDoor()
  591.     base - number of base to enter
  592.     flags - CBMF_SHOWMENU - Show menu if base = 0
  593.         CBMF_NOSTATUS - Do not display msgbase status
  594.     
  595. DreamDoor.library/IntCommand
  596.  
  597.     NAME
  598.     IntCommand - Run internal DayDream Command
  599.  
  600.     SYNOPSIS
  601.     DDCommand(dif, command)
  602.           D0   A0
  603.  
  604.     void DDCommand(struct *DIFace, char *);
  605.  
  606.     FUNCTION
  607.     Allows use of DayDream's commands (only internals)
  608.  
  609.     INPUTS
  610.     dif - A Pointer to the DIFace returned by InitDoor()
  611.     command - Command to be executed.
  612.  
  613. DreamDoor.library/CheckKey
  614.  
  615.     NAME
  616.     CheckKey - Gets a character from local console or remote terminal
  617.  
  618.     SYNOPSIS
  619.     result = CheckKey(dif)
  620.     D0               D0 
  621.     
  622.     ULONG *CheckKey(struct *DIFace, ULONG);
  623.  
  624.     FUNCTION
  625.     Checks if there's character in receive buffer and if so, returns
  626.     it.
  627.  
  628.     INPUTS
  629.     dif - A Pointer to the DIFace returned by InitDoor()
  630.  
  631.     RESULT
  632.     result - NULL if nothing or received character
  633.  
  634. DreamDoor.library/LineEditor
  635.  
  636.     NAME
  637.     LineEditor - Edit file using DD's built-in line editor.
  638.  
  639.     SYNOPSIS
  640.     LineEditor(dif, file)
  641.                D0    A0
  642.     
  643.     void LineEditor(struct *DIFace, char *);
  644.  
  645.     FUNCTION
  646.     Edit and create text file using DD's built-in line editor.
  647.  
  648.     INPUTS
  649.     dif - A Pointer to the DIFace returned by InitDoor()
  650.     file - Pointer to the filename to edit
  651.  
  652. DreamDoor.library/FifoExecute
  653.  
  654.     NAME
  655.     FifoExecute - Execute program and route output to user
  656.  
  657.     SYNOPSIS
  658.     FifoExecute(dif, command)
  659.                 D0    A0
  660.     
  661.     void FifoExecute(struct *DIFace, char *);
  662.  
  663.     FUNCTION
  664.     Execute dos-command and route output to the user.
  665.  
  666.     INPUTS
  667.     dif - A Pointer to the DIFace returned by InitDoor()
  668.     command - Pointer to the dos-command to execute. Following
  669.           controlcodes are available:
  670.  
  671.           %N = Node, %H = Handle, %R = Real name, %S = Screen length
  672.  
  673. DreamDoor.library/WriteLog
  674.  
  675.     NAME
  676.     WriteLog - Write string to the logfile.
  677.  
  678.     SYNOPSIS
  679.     WriteLog(dif, string)
  680.               D0    A0
  681.     
  682.     void WriteLog(struct *DIFace, char *);
  683.  
  684.     FUNCTION
  685.     Write string to the logfile.
  686.  
  687.     INPUTS
  688.     dif - A Pointer to the DIFace returned by InitDoor()
  689.     string - String to write. Following control codes are available:
  690.  
  691.               %A = ARQ Report
  692.               %B = Baudrate
  693.               %D = Date
  694.               %H = Handle
  695.               %L = Location
  696.               %N = Node
  697.               %O = Organization
  698.               %S = Security
  699.               %T = Time
  700.               %U = Real name
  701.  
  702.  
  703.